package com.sl.au.service;

import java.nio.file.Path;
import java.util.List;
import java.util.Map;

import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;

/**通过JXLS对EXCEL读写或将数据导出成EXCEL
 * @author Neil
 *
 */
public interface ExcelService extends BaseService {
	/**将对应实体名称的EXCEL文件读取到一个map里去
	 * 如果要读取一个users.xls,
	 * EXCEL文件的读取需要定义一个users.xml映射配置文件
	 * @param entityName  作为读取文件和命名的依据 如users,可用来读取users.xml，也作为默认要读取users.xlsx
	 * @param collections    保存读取的数据
	 * @param param 可先参数 在实体名称与读取文件名没有默认关系时， 可用来指定要读取的EXCEL文件名
	 * 读取后，这样得到数据	List<User> list=(ArrayList<User>)collections.get("users");
	 * 返回读取EXCEL文件的路径
	 */
	public <T>  Path read(String entityName,Map<String,Object> collections,String... param);
	/**将指定数据对象写入EXCEL文件
	 * @param list数据源
	 * @param templateFileName写入模板文件weeklyOT.xlsx  (OT:OutputTemplate)
	 * @param param:targetFileName目标文件如果不指定 按  usersOT201611041046.xlsx格式生成
	 * 返回生成的文件名称，不包含全路，如 usersOT201611041046.xlsx
	 * 生成的文件默认存放在c:\Windows\Temp目录下
	 * T表示实体类型，如Weekly
	 */
	public <T> String write(List<T> list,String templateFileName,String...  param);
	
	/**直接生成可下载文件，可在控制器里使用，
	 * @param list导出数据
	 * @param templateFileName导出模板文件
	 * @return
	 */
	public <T> ResponseEntity<Resource>  toExcel(List<T> list,String templateFileName);
	/**读取设置导入时上传EXCEL的目录
	 * @return
	 */
	public String getStorageLocation();
	public void setStorageLocation(String location);
	/**设置EXCEL文件类型："XLS","XLSX"(默认)
	 * @return
	 */
	public String getType();
	public void setType(String type);
	/**导入成功后将导入EXCEL时上传的文件删除
	 * @param fileName
	 */
	public void deleteUploadFile(Path path);
	/**和read()方法一样，主要区别是用于EXCEL文件导入，删除上传文件
	 * @param entityName
	 * @param collections
	 * @param param
	 */
	public void importExcel(String entityName,Map<String,Object> collections,String... param);
}
